package ar.edu.frba.utn.dds.Busqueda;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import com.lanchita.AerolineaLanchita;

import ar.edu.frba.utn.dds.Aerolinea.AeroLinea;
import ar.edu.frba.utn.dds.Vuelo.Asiento;
import ar.edu.frba.utn.dds.Vuelo.Vuelo;

public class BusquedaAeroLanchita implements BusquedaInterface{
	private static AerolineaLanchita aeroLanchita = AerolineaLanchita.getInstance();
	
	public void buscarVuelosDisponibles(AeroLinea aeroLinea, Vuelo vueloDeseado){
		List<Vuelo> vuelos = new ArrayList<Vuelo>();
		List<Asiento> tmpAsientos = new ArrayList<Asiento>();
		Integer contadorAsientos = 0;
		
		String [][] asientos = aeroLanchita.asientosDisponibles(null, null, null, null, null, null);
		
		List<String[]> disponibles = Arrays.asList(asientos);
		Iterator<String[]> iterator = disponibles.iterator();
		
		Boolean reservado;
		while (iterator.hasNext()) {
			String[] element = iterator.next();
			
			if (element[4].equalsIgnoreCase("D")){
				reservado = false;
			}else{
				reservado = true;
			}
				
			tmpAsientos.add(aeroLinea.getConversorAerolinea().convertirAsiento(element[0], element[1], element[2],
					element[3], element[4],reservado, element[5], element[6], element[7],
					element[8], element[9], element[10],element[11], contadorAsientos));
			
			contadorAsientos+=1;
		}
		
		Iterator<Asiento> iterateAsiento = tmpAsientos.iterator();
		
		while (iterateAsiento.hasNext()){
			Asiento tmpAsiento = iterateAsiento.next();
			Iterator<Vuelo> iterateVuelos = vuelos.iterator();
			
			Boolean condicionVuelo = false;
			Integer contadorVuelo = 0;
			while(iterateVuelos.hasNext()){
				Vuelo vuelo = iterateVuelos.next();
				if (tmpAsiento.getOrigen().equalsIgnoreCase(vuelo.getOrigen())
						&& tmpAsiento.getDestino().equalsIgnoreCase(vuelo.getDestino())
						&& tmpAsiento.getFechaLlegada().equalsIgnoreCase(vuelo.getFechaLlegada())
						&& tmpAsiento.getFechaSalida().equalsIgnoreCase(vuelo.getFechaSalida())
						&& tmpAsiento.getHoraLlegada().equalsIgnoreCase(vuelo.getHoraLlegada())
						&& tmpAsiento.getHoraSalida().equalsIgnoreCase(vuelo.getHoraSalida())){
					condicionVuelo = true;
					tmpAsiento.setVuelo(vuelo);
					vuelo.getAsientosVuelo().add(tmpAsiento);
				}
				contadorVuelo+=1;
			}
			
			if (!condicionVuelo){
				Vuelo newVuelo = new Vuelo("aeroLanchita-"+contadorVuelo,tmpAsiento.getOrigen(), tmpAsiento.getFechaSalida(), 
						tmpAsiento.getHoraSalida(), tmpAsiento.getDestino(), tmpAsiento.getFechaLlegada(), tmpAsiento.getHoraLlegada());
				tmpAsiento.setVuelo(newVuelo);
				newVuelo.getAsientosVuelo().add(tmpAsiento);
				newVuelo.setAeroLinea(aeroLinea);
				aeroLinea.getVuelos().add(newVuelo);
			}
		}
	}
}
